\chapter{Űrlap kezelési alternatívák}

	Egy űrlapokkal dolgozó rendszer esetén az egyik legfontosabb kérdés az, hogy
	hogyan, milyen formában kezelje az űrlapokat. Ennek eldöntéséhez megvizsgáltam
	többféle űrlap formátumot, és ezek alkalmazási lehetőségeit.

	\section{Űrlap formátumok}
	
		A jelenleg alkalmazásban lévő űrlapokat alapvetően két csoportba sorolhatjuk:
		programozott és paraméterezett űrlapok. A következő szakaszban elmagyarázom a
		két megközelítés közötti különbséget és sorra veszem a gyakrabban használt
		űrlap formátumokat besorolva azokat valamelyik kategóriába és értékelve a
		képességeiket.
		
		\subsection{Programozott űrlapok}
		
			Programozott űrlapokról akkor beszélhetünk, mikor az űrlapon szereplő, a
			felhasználótól bekért adatokhoz tartozó mezőket valamilyen, az űrlap
			témakörénél általánosabb módszerrel jeleníti meg a rendszer. Ennek 
			tipikus esete, mikor egy programnyelv beépített eszközkészletét használja
			az egyes mezők megjelenítésére. Ebben az esetben nem beszélhetünk konkrét
			űrlap formátumról, az űrlap csak futásidőben áll elő, és az azt generáló
			program nélkül nem értelmezhető, ahogy egy tetszőleges program
			felhasználói felülete értelmezhetetlen a mögötte lévő program-logika nélkül.
			
			Ennek a megközelítésnek az előnye a rugalmasság, a programozó szabadon 
			alakíthatja a mezők elrendezését az űrlapon, és szükség esetén akár
			dinamikusan változó űrlapot is létrehozhat. Hátránya viszont, hogy az űrlap
			előállításához szükség van az űrlapot generáló programra az űrlap
			kitöltésének idejében.
		
		\subsection{Paraméterezett űrlapok}
		
			Paraméterezett űrlap használata esetén kiválasztunk egy formátumot, amivel
			az űrlapot önmagában leírjuk, leválasztva azt a programlogikától. A
			paraméterezett űrlap tartalmazza, hogy milyen adatokat kell megadnia a
			felhasználónak, a megjelenítéséhez egy külön eszközre van szükség, ami
			elkülönül a kitöltött adatok feldolgozására használt eszköztől.
			
			Egy alkalmas űrlap formátum képes leírni a kitöltendő mezőket, a mezők
			típusait, illetve az egyes mezők megjelenítéséhez szükséges információkat,
			mint például a mezők sorrendje és felirata. Továbbá a formátum tartalmazhat
			lehetőséget különböző kényszerek definiálására, úgy mint két mező közötti
			összefüggések, és számossági megkötések arra az esetre, ha egy mezőbe a
			felhasználó több értéket adhat meg.
			
		\subsection{PDF űrlapok}
			
			Az Adobe által kifejlesztett Portable Document Format\cite{pdf} szabvány az
			egyik legelterjedtebb dokumentum-formátum napjainkban. A PDF szabvány többek
			között tartalmaz lehetőséget űrlapok\cite{pdf-forms} definiálására is. 
			
			Ezen formátum fejlesztésekor különös figyelmet fordítottak a kitöltött és
			kinyomtatott űrlap szkennelt feldolgozására, azaz a beszkennelt űrlapról
			számítógépes feldolgozással lehetővé válik az információ kinyerése
			írás-felismerés segítségével. Ez a lehetőség akkor hasznos, ha levélben vagy
			más papír alapú módon továbbítjuk a kitöltött űrlapokat. Természetesen a
			kitöltött PDF űrlap e-mailben is továbbítható, ekkor a kitöltött adatokat a
			PDF fájl mellékletként tárolja egy XML alapú ún. Form Data
			Format\cite{pdf-fdf} formátumban.
			
			A PDF űrlap elemeit a dokumentum szövegben lehet elhelyezni, a PDF formázási
			módszereket használva. Ezzel a módszerrel szép, professzionális űrlapok
			gyárthatóak és csak egy megfelelő PDF megjelenítő eszközre van szükség, amin
			keresztül a felhasználó a kitöltheti az űrlapot, és a kitöltött adatokat
			mellékletbe helyezve elmentheti a kitöltött PDF űrlapot.
			
			A PDF űrlap formátum egyértelműen a paraméterezett űrlapok közé sorolható,
			egyetlen hátránya csupán, hogy semmilyen támogatást nem nyújt dinamikus
			űrlapok létrehozására, azaz korlátozottan tud kezelni például többszörös
			értéket egy mezőben. A legtöbb alkalmazásban azonban erre nem lesz szükség,
			de mint később megmutatom, más formátum jobban illeszkedik a rendszer
			igényeihez.
			
		\subsection{HTML forms}	
			
			A web-en egyértelműen kizárólagos elterjedtséggel használják a HTML 
			szabványt űrlapok megjelenítésére. A szabvány bemeneti mezők széles 
			skáláját engedi használni, azonban egyáltalán nem foglalkozik az egyes
			mezők típusával, és az egyes mezők megjelenítésén kívül semmivel sem
			foglalkozik. Habár a hiányzó funkcionalitás pótolható JavaScript
			segítségével, ún. dinamikus HTML dokumenumot (DHTML) hozva létre, ez a
			technológia inkább a programozott űrlap technológiába sorolható. Ennek fő
			oka, hogy a HTML űrlapot gyakran egy a webkiszolgálón futó program
			generálja a kliens kérésére, továbbá az űrlap mindenképpen HTTP
			protokollon keresztül próbálja elküldeni az űrlapba kitöltött adatokat, 
			feltételezve a feldolgozó program elérhetőségét a hálózaton keresztűl, azaz
			nem különül el teljesen a megjelenítés a feldolgozástól.
			
		\subsection{XForms}
		
			Az XForms\cite{xforms} a W3C\cite{xforms-wg} által fejlesztés alatt 
			álló szabvány,
			amely 1.1-es verziója jelenleg ``ajánlás-jelölt'' fokozaton áll, ami annyit
			jelent, hogy ha nem találnak hibát ebben a verzióban, akkor ez válik
			ajánlássá a szabványt használók számára. A szabvány a HTML űrlapok
			hiányosságait hivatott orvosolni és várhatóan pár éven belül teljesen 
			felváltja a HTML űrlapokat a webes alkalmazásokban. A technológia még 
			viszonylag új, így nem sok eszköz támogatja, de létezik Firefox-hoz egy 
			kiterjesztés, amellyel a böngésző
			teljes mértékben képes lesz megjeleníteni és működtetni az XForms
			dokumentumokat. Továbbá a W3C oldalán hivatkozva találhatunk egy szerver
			oldali megvalósítást is, amely segítségével a szabványt nem támogató
			böngészők számára is elérhetővé válik ezzel a technológiával készült űrlapok
			megjelenítése.
			
			A szabvány egyik fő alapelve az űrlap modell és a megjelenítés elkülönítése.
			Egy XForms dokumentum (Amely egyébként kötelezően megfelel az XHTML
			szabványnak is) tartalmaz egy XML dokumentum modellt, és a megjelenített
			mezőket. Minden egyes mezőt egy-egy XPath\cite{xpath} kifejezés csatol a
			dokumentum modellhez, összekötve a modellt a megjelenítéssel. A felhasználó 
			által
			beadott adatok bekerülnek a dokumentum modellbe, és a kitöltés végén egy
			komplett XML dokumentum áll elő.
			
			A szabvány támogatja az XML dokumentumban lévő ismétlődő ágakat, ezáltal
			lehetőséget biztosítva a többszörös mezőkre is, továbbá alapértelmezetten
			XSD\cite{xsd-datatypes} típusokkal dolgozik, így az egyes mezőknek tetszőleges típus
			definiálható.
			
			\subsubsection{Egy XForms dokumentum felépítése}
			
			\label{ch3:xforms-structure}
			
			Mint azt fent említettem, egy XForms dokumentum nem más, mint egy XHTML
			dokumentum XForms elemekkel kiegészítve. Egy ilyen dokumentumnak alapvetően
			két része van: a ``fej''-nek hívott definíciós rész, és a ``törzs'' nevű
			megjelenítésért felelős rész. Egy XForms dokumentum ezen kereten belül
			különíti el az űrlap modellt és az űrlap megjelenítését.
			
			Az űrlap modell a dokumentum fejrészében helyezkedik el, és a megjelenített	
			űrlap mögött lévő adatszerkezetet írja le. Az űrlap modell legfontosabb
			része az egyed (instance), ami az űrlap által kitöltött XML dokumentumfát
			tárolja. Ez az XML lehet az XHTML dokumentumban közvetlenül tárolva, vagy
			külső fájlként is tárolható, a dokumentum pedig egy URL segítségével
			hivatkozik rá.
			
			Az űrlap megjelenítését az XHTML dokumentum törzs részébe rakható
			űrlap-elemek végzik. A legtöbb űrlap elem egyszerű mezőt reprezentál,
			egyetlen szöveg, dátum, vagy hasonló típusú adat bekérésére alkalmas. Minden
			ilyen elemet a modellben szereplő XML dokumentumhoz lehet kötni, így amikor
			a felhasználó kitölti a mezőt, a megjelenítés mögött lévő XML egyedben
			megjelenik a megadott érték.

	\section{Megvizsgált módszerek}

		A továbbiakban fogom ismertetni, hogy a fentiek alapján milyen technológiákat
		próbáltam ki részletesebben. Alapvetően kétféle megközelítést vizsgáltam meg,
		az egyiket az önálló labor félévek alatt, a másikat pedig az önálló labor
		tapasztalatai alapján a diplomaterv keretében dolgoztam ki.
		
		Mindkét megoldás célja, hogy leképezést adjon a tudásbázis és az űrlap leírás
		között, hiszen a rendszer szándéka az, hogy a tudásbázis alapján generálja az
		űrlapot, és támogatást adjon a kitöltött adatok feldolgozására.

	\subsection{Online kitöltés}

		\label{ch3:online}

		Az önálló laboratórium keretében megvalósított eszköz esetében egy
		programozott űrlap jellegű megoldást alkalmaztam. A megoldás alapja egy olyan
		keretrendszer volt, amely a böngészőben megjelenített HTML űrlapot a kitöltés
		során folyamatosan kapcsolatban tartja a kiszolgálón található tudásbázissal.
		A megközelítést ``Online kitöltés''-nek kereszteltem el jelezve, hogy az
		űrlap kitöltése során online kapcsolatban áll a rendszer a kiszolgálón
		található tudásbázissal. A keretrendszer lehetővé tette, hogy a kitöltés
		közben a tudásbázison végzett lekérdezésekkel vezérelje a kitöltés menetét. A
		tudásbázissal való közvetlen és állandó kapcsolatot arra használtam, hogy a
		tudásbázisban definiált különböző kényszereket azonnal alkalmazni tudjam az
		űrlapon. A rendszer képes ellenőrizni az egyes mezőkbe beírt értékek
		típusait, továbbá a tudásbázis alapján végezhető részleges feldolgozást is
		képes elvégezni, így a felhasználó kitöltés közben információt kaphat az
		általa begépelt adatok feldolgozási eredményéről.
		
		Ezzel a megközelítéssel sikerült lehetővé tennem a tudásbázist közvetlenűl
		használó fejlett funkciók elérését a felhasználó számára. A tudásbázissal
		való kapcsolatnak azonban ára van, mivel a tudásbázison történő következtetés
		erőforrás-igényes művelet és ennek megfelelően lassú, továbbá a hálózat
		késleltetése sem elhanyagolható. A felhasználónak gyakran kell egy vagy két
		másodperces késleltetést elviselnie. Nem is beszélve arról, hogy egy ilyen
		rendszert több felhasználóra kell tervezni, így fontos szempont a
		skálázhatóság is.

	\subsection{Offline kitöltés}

		\label{ch3:offline}

		Az önálló labor keretében alkalmazott megoldás hibáit kiküszöbölendő a
		diplomaterv során egy eltérő, paraméterezett űrlap jellegű megközelítést
		választottam. Az online kitöltésnél alkalmazott módszer legnagyobb hibája,
		hogy az űrlapok megjelenítésekor pazarlóan sok lekérdezést végez a
		tudásbázison. A kitöltendő mezőket és az azokhoz tartozó információkat az
		űrlap megjelenítésekor gyűjti ki a tudásbázisból akkor is, ha több
		felhasználó nyitja meg ugyanazt az űrlapot, újra és újra lefuttatva
		ugyanazokat a lekérdezéseket.
		
		Ehelyett egy olyan megoldást alkalmaztam, ami a megjelenítendő űrlapot a
		megjelenítés előtt lefordítja egy szabványos formátumba - jelen esetben
		egy XForms szabványnak megfelelő dokumentumba, s ezután a felhasználó ezt a
		dokumentumot megnyithatja és kitöltheti. A módszer előnye, hogy az űrlap
		kitöltéséhez egyáltalán nincs szükség a tudásbázishoz, és így a kiszolgálóhoz
		sem, egy lényegesen egyszerűbb űrlap-megjelenítő eszközre van csak szüksége a
		felhasználónak, hogy kitölthesse az űrlapot. A tudásbázisra ezután csak az
		űrlap feldolgozásakor van szükség. 
		
		Az XForms szabvány támogatja a kitöltött űrlap elmentését saját lemezre, és
		később újbóli megnyitását, így a felhasználó teljesen szabadon határozza meg
		a kitöltés és az adatok beküldésének idejét. Ez a megközelítés megvalósítja a
		bevezetőben említett időbeli elválasztását az űrlap kitöltésének az űrlap
		feldolgozásától.

		A megközelítés egyetlen hátránya az online kitöltéssel szemben az, hogy a
		tudásbázis hiányában a kitöltés során a felhasználó nem kap információt az
		űrlap feldolgozási eredményéről, ahogy azt az online kitöltési módszer
		lehetővé tette. Ezt az információt csak akkor szerezheti be, ha a kitöltött
		űrlapot elküldi a kiszolgáló számára. Ez a probléma azonban megkerülhető egy
		olyan szolgáltatás engedélyezésével a kiszolgálón, mely segítségével a
		felhasználó végrehajthatja az űrlap előzetes kiértékelését, és eredményt
		kérhet róla anélkül, hogy véglegesítené az űrlapot és elküldené a feldolgozó
		szervezet számára.
